package com.tedu.review.day02;
/**
 * 类的创建过程(JVM虚拟机--内存创建流程:栈,堆,方法区)
 * 1.从程序入口  加载xxx.class文件,类对象存到方法区中[方法区:并行]
 * 2.如果发现 加载xxx.class文件中,存在static静态块,存入方法区,创建对象之前提前调用
 * 3.发现cs 引用,将这个引用转换为一个地址值:0X000,存入栈内存[栈区:并行]
 * 4.发现new 对象(),在堆内存中,给对象申请[随意]空间
 *   理解:宾馆,很多屋子   前台服务元[引用]----来一个客人[new]开一个屋子
 * 5.类创建[实例化]执行步骤:限制性方法区:静态块-->执行普通代码块-->初始化
 * 6.给栈中生成的地址池进行指向,堆内存中 随意开辟的空间(初始值)[与栈内存地址一致]
 * 7.给栈中生成的地址池进行指向,堆内存中 随意开辟的空间(赋值)[与栈内存地址一致]
 *
 * 调用结束之后操作:
 * 1.栈:编译器自动分配,使用完毕自动释放
 * 2.堆:一般由程序员分配释放,若程序员没有释放,Java程序自动进行垃圾回收
 *                                      GC垃圾回收
 * 3.全局区(静态区):全局变量和静态变量在内存当中存在一起的,
 *                初始化的全局变量和静态变量存在一起的
 *                未初始化的全局变量和未初始化的静态变量在相邻的另一块区域
 *             ---程序结束   释放
 * 4.常量池:存在方法区中    ---程序结束  释放 s[JavaAPI 字符串]
 */
public class 类的创建过程 {
    public static void main(String[] args) {
        /*完成一次创建对象*/
        CountrySide cs=new CountrySide();
    }
}
class CountrySide{
    /*代码块*/
    {
        System.out.println("请问厕所在哪个科室:赵四");
    }
    /*静态代码块*/
    static{
        System.out.println("爹,我跟小梦的是以后你就别管了");
    }
    /*①成员变量:变量,类中存在变量就是成员变量,可以由修饰符修饰*/
    private String name="赵四";
    private int age=56;
    /*②构造器|构造方法|句柄:创建对象初始化*/
    public  CountrySide(){
        name="刘能";
        System.out.println(name+":这车能看不能摸,但是可以往外说");
    }
}
